'=======================================
' 执行所有测试 case
'=======================================
Public Sub test_all_case()
    ' ObjStack 池测试
    test_objStackPool
    ' PrimitiveStack 池测试
    test_primitiveStackPool
    ' Set 类型池
    test_baseSetPool
    ' LinkedHashSet 类型的池
    test_linkedSetPool
End Sub

'=======================================
' ObjStack
'=======================================
Private Sub test_objStackPool()
    ' 1. 由池创建对象
    Dim o1 As ObjStack
    Set o1 = UtilsPool.getObjStack
    UtilsPool.releaseObjStack o1

    Dim o2 As ObjStack
    Set o2 = UtilsPool.getObjStack
    Debug.Assert o2 Is o1

    ' 2. 在外部手动创建对象，并添加数据到缓存
    Set o1 = New ObjStack
    Dim c1 As Collection
    Set c1 = New Collection
    Dim c2 As Collection
    Set c2 = New Collection
    o1.push c1
    o1.push c2
    Debug.Assert o1.Count = 2
    UtilsPool.releaseObjStack o1
    Debug.Assert o1.Count = 0

    ' 从池中获取到的栈的内容为空
    Set o2 = UtilsPool.getObjStack
    Debug.Assert o2 Is o1
End Sub

'=======================================
' PrimitiveStack
'=======================================
Private Sub test_primitiveStackPool()
    ' 1. 由池创建对象
    Dim o1 As PrimitiveStack
    Set o1 = UtilsPool.getPrimitiveStack
    UtilsPool.releasePrimitiveStack o1

    Dim o2 As PrimitiveStack
    Set o2 = UtilsPool.getPrimitiveStack
    Debug.Assert o2 Is o1

    ' 2. 在外部手动创建对象，并添加数据到缓存
    Set o1 = New PrimitiveStack
    o1.push "c1"
    o1.push "c2"
    Debug.Assert o1.Count = 2
    UtilsPool.releasePrimitiveStack o1
    Debug.Assert o1.Count = 0

    ' 从池中获取到的栈的内容为空
    Set o2 = UtilsPool.getPrimitiveStack
    Debug.Assert o2 Is o1
End Sub

'=======================================
' Set 类型池
'=======================================
Private Sub test_baseSetPool()
    ' 1. 由池创建对象
    Dim o1 As ISet
    Set o1 = UtilsPool.getSet
    UtilsPool.releaseSet o1

    Dim o2 As ISet
    Set o2 = UtilsPool.getSet
    Debug.Assert o2 Is o1

    ' 2. 在外部手动创建对象，并添加数据到缓存
    Set o1 = UtilsSet.createHashSet
    o1.Add "c1"
    o1.Add "c2"
    Debug.Assert o1.Count = 2
    UtilsPool.releaseSet o1
    Debug.Assert o1.Count = 0

    ' 从池中获取到的栈的内容为空
    Set o2 = UtilsPool.getSet
    Debug.Assert o2 Is o1
End Sub

'=======================================
' LinkedHashSet 类型的池
'=======================================
Private Sub test_linkedSetPool()
    ' 1. 由池创建对象
    Dim o1 As ISet
    Set o1 = UtilsPool.getLinkedSet
    UtilsPool.releaseLinkedSet o1

    Dim o2 As ISet
    Set o2 = UtilsPool.getLinkedSet
    Debug.Assert o2 Is o1

    ' 2. 在外部手动创建对象，并添加数据到缓存
    Set o1 = UtilsSet.createLinkedHashSet
    o1.Add "c1"
    o1.Add "c2"
    Debug.Assert o1.Count = 2
    UtilsPool.releaseLinkedSet o1
    Debug.Assert o1.Count = 0

    ' 从池中获取到的栈的内容为空
    Set o2 = UtilsPool.getLinkedSet
    Debug.Assert o2 Is o1
End Sub